iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
Software Development

用python做一個X11 WM系列 第 5

Day 5|還沒開始寫就在debug

  • 分享至 

  • xImage
  •  

昨天太早發文章,這裡其實有一個粗略的api參考,

我都不知道xlib有這麼多鼠標
我猜全世界只有我跟xlib開發者知道,但他們大概也忘了
所以全世界只有我知道XD

我發現Xephyr不知道為什麼拿不到我的輸入

from Xlib import display,X,XK,xobject,Xcursorfont
dpy=display.Display()
screen=dpy.screen()
root=screen.root
#註冊事件
screen.root.grab_key(dpy.keysym_to_keycode(XK.string_to_keysym("q")),X.Mod4Mask,1,X.GrabModeAsync, X.GrabModeAsync)
screen.root.grab_key(dpy.keysym_to_keycode(XK.string_to_keysym("r")),X.Mod4Mask,1,X.GrabModeAsync, X.GrabModeAsync)
font = dpy.open_font('cursor')           # 開啟 cursor 字型
cursor = font.create_glyph_cursor(
    font,                                # mask 用同一個 font
    Xcursorfont.gumby,                   # 游標形狀(source_char)https://xorg.freedesktop.org/archive/current/doc/libX11/libX11/libX11.html#x_font_cursors
    #Xcursorfont.left_ptr,
    Xcursorfont.gumby+1,                 # mask_char(通常是 +1)
    (0, 0, 0),                           # 前景色 RGB(黑色)
    (65535, 65535, 65535)                # 背景色 RGB(白色)
)

root.change_attributes(cursor=cursor)
q_code=dpy.keysym_to_keycode(XK.string_to_keysym("q"))
r_code=dpy.keysym_to_keycode(XK.string_to_keysym("r"))
while True:
    event=dpy.next_event()
    if event.type==X.KeyPress and event.child: #!= X.NONE:
        if event.detail==q_code:
            print(f"kill client{event.child.get_wm_name()}")
            event.child.kill_client()
            #event.child是滑鼠底下的視窗
        if event.detail==r_code:
            print(f"moving window{event.child.get_wm_name()}")
            event.child.configure(x=100,y=100)
            #configure(x,y,w,h)
        dpy.flush()

不管怎麼按都沒有印出訊息也沒有動作,除了super+q很詭異,有時候我沒寫super+q關視窗的部分super+q還是可以把xephyr裡面的xlogo關掉,我也沒有啟動其他WM,反正就是很詭異,甚至tinywm.py也不知道為什麼都不能操作,我num lock也沒開,這debug非常痛苦,如果今天沒處理好我明天會煩一整天直到放學才能繼續,我先發文不然我晚一點就會因為太痛苦而懶得發,我有點想放棄不是因為鐵人賽而是繼續做這個東西,太煩了,但我不能放棄,至少要等鐵人賽完賽再放棄,要是我真的做成功了那我真的就是一個技術提升很多的「鐵人」了,今天就先抱怨到這


上一篇
Day 4|顯示鼠標(我要瘋了
下一篇
Day 6|今天沒時間
系列文
用python做一個X11 WM14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言